package escom.dds.gestionarreporte.bussines;

import javax.inject.Named;
import javax.inject.Singleton;
import javax.servlet.ServletOutputStream;

import escom.dds.gestionarreporte.dao.BD;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;


@Singleton
@Named("reporteBs")
public class ReporteBs {

	
	
	/**
	 * Método que se encarga de compilar el reporte RP 3 Informe de Gobierno.
	 * Obras terminadas, usando Jasper report.
	 * 
	 * @param outputStream
	 *            Flujo por donde saldran los datos del reporte.
	 * @param contextReportes
	 *            La ruta de la carpeta webapp.
	 * @param fhInicial
	 *            Fecha Inicial del Filtro.
	 * @param fhFinal
	 *            Fecha Final del Filtro.
	 * @param unidadesAdmin
	 *            Lista de los id de las unidades administrattivas.
	 */
	public void compilarReporteCarrera(ServletOutputStream outputStream, String contextReportes) {
		BD bd = new BD();
		try {
			JasperReport report = (JasperReport) JRLoader
					.loadObjectFromFile(contextReportes
							+ "/aplicacion/imprimir-reporte/carrera.jasper");
			JasperPrint jasperPrint = JasperFillManager.fillReport(report,
					null, bd.abrirConexion());
			exportReport(jasperPrint, outputStream);
		} catch (Exception e) {
			System.err.println("No se pudo generar reporte");
		}

	}
	
	public void compilarReporteMateria(ServletOutputStream outputStream, String contextReportes) {
		BD bd = new BD();
		try {
			JasperReport report = (JasperReport) JRLoader
					.loadObjectFromFile(contextReportes
							+ "/aplicacion/imprimir-reporte/materia.jasper");
			JasperPrint jasperPrint = JasperFillManager.fillReport(report,
					null, bd.abrirConexion());
			exportReport(jasperPrint, outputStream);
		} catch (Exception e) {
			System.err.println("No se pudo generar reporte");
		}

	}

	public void compilarReporteAlumno(ServletOutputStream outputStream, String contextReportes) {
		BD bd = new BD();
		try {
			JasperReport report = (JasperReport) JRLoader
					.loadObjectFromFile(contextReportes
							+ "/aplicacion/imprimir-reporte/alumno.jasper");
			JasperPrint jasperPrint = JasperFillManager.fillReport(report,
					null, bd.abrirConexion());
			exportReport(jasperPrint, outputStream);
		} catch (Exception e) {
			System.err.println("No se pudo generar reporte");
		}

	}
	

	private void exportReport(JasperPrint jasperPrint,
			ServletOutputStream outputStream) throws JRException {
		JRExporter exporter = new JRXlsExporter();
		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
		exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, true);
		exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER,
				false);
		exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
				false);
		exporter.setParameter(
				JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, true);
		exporter.exportReport();
	}

}
